package com.estun.backroundManagementService.utils;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;

import java.lang.reflect.Field;

public class QueryWrapperUtil {

    public static <T> QueryWrapper<T> buildQueryWrapper(T query) {
        QueryWrapper<T> queryWrapper = new QueryWrapper<>();
        if (query != null) {
            Class<?> clazz = query.getClass();
            Field[] fields = clazz.getDeclaredFields();
            for (Field field : fields) {
                try {
                    // 检查字段上是否有@TableField注解，并且exist属性是否为false
                    TableField tableField = field.getAnnotation(TableField.class);
                    if (tableField != null && !tableField.exist()) {
                        continue; // 如果存在且为false，则忽略该字段
                    }

                    field.setAccessible(true);
                    Object value = field.get(query);
                    if (!ObjectUtils.isEmpty(value)) {
                        // 将驼峰命名法转换为下划线形式
                        String columnName = camelToUnderscore(field.getName());
                        //如果字段中包含name 使用模糊匹配
                        if (columnName.contains("name")) {
                            queryWrapper.like(columnName, value);
                        } else {
                            queryWrapper.eq(columnName, value);
                        }
                    }
                } catch (IllegalAccessException e) {
                    // 处理异常，可以选择记录日志或其他操作
                    e.printStackTrace();
                }
            }
        }
        return queryWrapper;
    }

    // 将驼峰命名法转换为下划线形式
    private static String camelToUnderscore(String input) {
        return StringUtils.isEmpty(input) ? input :
                input.replaceAll("([a-z])([A-Z])", "$1_$2").toLowerCase();
    }
}
